package com.code.test;

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

/**
 * Kangpanpan k00451589对所有人说： 08:28 PM
 * 假设你是一位很棒的家长，想要给你的孩子们一些小饼干。但是，每个孩子最多只能给一块饼干。
 * 对每个孩子 i，都有一个胃口值 g[i]，这是能让孩子们满足胃口的饼干的最小尺寸；并且每块饼干 j，
 * 都有一个尺寸 s[j] 。如果 s[j] >= g[i]，我们可以将这个饼干 j 分配给孩子 i ，
 * 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子，并输出这个最大数值。
 *  
 *  
 * 示例 1:
 *  
 * 输入: g = [1,2,3], s = [1,1]
 * 输出: 1
 * 解释:
 * 你有三个孩子和两块小饼干，3个孩子的胃口值分别是：1,2,3。
 * 虽然你有两块小饼干，由于他们的尺寸都是1，你只能让胃口值是1的孩子满足。
 * 所以你应该输出1。
 * 示例 2:
 *  
 * 输入: g = [1,2], s = [1,2,3]
 * 输出: 2
 * 解释:
 * 你有两个孩子和三块小饼干，2个孩子的胃口值分别是1,2。
 * 你拥有的饼干数量和尺寸都足以让所有孩子满足。
 * 所以你应该输出2.
 *  
 *  
 * 提示：
 * 1 <= g.length <= 3 * 104
 * 0 <= s.length <= 3 * 104
 * 1 <= g[i], s[j] <= 231 - 1
 *
 *
 * s1 /s2
 * g1 / g2
 *
 * s1 s2 g1 g2  0
 * s1 g1 s2 g2  g1 s2
 * s1 g1 g2 s2  g1 g2
 * g1 g2 s1 s2  max[g,s]
 * g1 s1 g2 s2  g1 s2
 * g1 s1 s2 g2  g1 s1
 *
 */

public class Main5 {

    public static int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int pre1 = g.length - 1;
        int pre2 = s.length - 1;
        int count = 0;
        while(pre2 >= 0 && pre1 >= 0){
            if(s[pre2] >= g[pre1]){
                count++;
                pre1--;
                pre2--;
            }else{
                pre1--;
            }
        }
        System.out.println(count);
        return count;
    }

    public static void dealWhit(int[] g,int[] s){
        int g_max = Arrays.stream(g).max().getAsInt();
        int g_min = Arrays.stream(g).min().getAsInt();
        int s_max = Arrays.stream(s).max().getAsInt();
        int s_min = Arrays.stream(s).min().getAsInt();
        int re = 0;
        // g<s = min[g,s]
        if(g_max <= s_min){
            re = g.length > s.length ? s.length :g.length;
            System.out.println(re);
            return;
        }
        // s < g = 0
        if(s_max < g_min){
            System.out.println(re);
            return;
        }
        // s < g < s
        if(s_min <= g_min && g_max <= s_max ){

        }
        // s g s g
        if(s_min <= g_min && g_min <= s_max && s_max <= g_max){

        }
        // g < s < g
        if(g_min <= s_min && s_max <= g_max){

        }
        // g < s <g < s
        if(g_min <= s_min && s_min <= g_max && g_max <= s_max ){

        }

    }

    public static void main(String[] args) {
        //Scanner sc = new Scanner(System.in);
        int[] g = {1,2,3};
        int[] s = {3,5};
        //doWork(g,s);
        findContentChildren(g,s);

    }

    public static  void doWork(int[] g,int[] s){
        int flag = 0;
        Arrays.sort(g);
        Arrays.sort(s);
        int j=0;
        boolean[] ss = new boolean[s.length];
        for (int i = 0;i<g.length;i++){
            for (;j<s.length;j++){
                if(g[i] <= s[j] && !ss[j]){
                    ss[j] = true;
                    flag++;
                    break;
                }
            }
        }
        System.out.println(flag);

    }
}
